#include "pch.hpp"
#include "ErrorModel.hpp"




ErrorModel::ErrorModel()
	: m_errorIcon(":/icons/error")
{}
///////////////////////////////////////////////////////////////////////////////////////////////////




void ErrorModel::add(const Error& error)
{
	beginInsertRows(QModelIndex(), m_errors.size(), m_errors.size() + 1);
	m_errors.push_back(error);
	endInsertRows();
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void ErrorModel::add(const Errors& errors)
{
	beginInsertRows(QModelIndex(), m_errors.size(), m_errors.size() + errors.size());
	m_errors.reserve(m_errors.size() + errors.size());
	foreach(const Error& error, errors)
	{
		m_errors.push_back(error);
	}
	endInsertRows();
}
///////////////////////////////////////////////////////////////////////////////////////////////////

const ErrorModel::Errors& ErrorModel::errors() const
{
	return m_errors;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void ErrorModel::clear()
{
	beginResetModel();
	m_errors.clear();
	endResetModel();
}
///////////////////////////////////////////////////////////////////////////////////////////////////




QModelIndex ErrorModel::index(int row, int column, const QModelIndex& parent) const
{
	return createIndex(row, column);
}
///////////////////////////////////////////////////////////////////////////////////////////////////

QModelIndex ErrorModel::parent(const QModelIndex& index) const
{
	return QModelIndex();
}
///////////////////////////////////////////////////////////////////////////////////////////////////

int ErrorModel::rowCount(const QModelIndex& parent) const
{
	if(parent != QModelIndex())
		return 0;

	return m_errors.size();
}
///////////////////////////////////////////////////////////////////////////////////////////////////

int ErrorModel::columnCount(const QModelIndex& parent) const
{
	if(parent != QModelIndex())
		return 0;

	return 5;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

QVariant ErrorModel::data(const QModelIndex& index, int role) const
{
	if(index.row() >= rowCount())
		return QVariant();

	const Error& e = m_errors[index.row()];

	if(role == Qt::DisplayRole)
	{
		switch(index.column())
		{
		case 1: return index.row() + 1; //< #nbr of error
		case 2: return e.what;          //< Description
		case 3: return e.line;          //< Line
		case 4: return e.col;           //< Column
		}
	}
	if(role == Qt::DecorationRole)
	{
		switch(index.column())
		{
		case 0: return m_errorIcon;
		}
	}

	return QVariant();
}
///////////////////////////////////////////////////////////////////////////////////////////////////

QVariant ErrorModel::headerData(int section, Qt::Orientation orientation, int role) const
{
	if(orientation != Qt::Horizontal)
		return QVariant();

	if(role != Qt::DisplayRole)
		return QVariant();

	switch(section)
	{
	case 1: return tr("#");
	case 2: return tr("Description");
	case 3: return tr("Line");
	case 4: return tr("Column");
	}

	return QVariant();
}
///////////////////////////////////////////////////////////////////////////////////////////////////
